<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Javascript的class定义类</h1>
<hr>
<script>
    //1.es5和es6构造实例的区别

    //ES5的方式：
    //Person为构造函数
    /*
    function Person(name,age,addr){
        this.name = name;
        this.age = age;
        this.addr = addr;
    }
    //在构造函数的原型上添加方法
    Person.prototype.sayHello=function(){console.log("hello,my name is "+this.name);}
    //构造一个实例
    let person = new Person('张三',18,'西安市');
    //在实例上调用该方法
    person.sayHello();
    console.log(person);
    console.log(person instanceof Object);
    */


    //ES6的方式：

    // 类中的this指向创建的实例
    /*
    class Person{
        constructor (name, age,addr) {
            this.name = name;
            this.age = age ;
            this.addr = addr;
        }
        sayHello(){
            console.log("hello,my name is "+this.name);
        }
    }
    //构造一个实例
    let person = new Person('张三',18,'西安市');
    //在实例上调用该方法
    person.sayHello();
    console.log(person);
    console.log(person instanceof Object);
    */

    //2.class基本语法

    // 类中的this指向创建的实例
    /*
    class Person{
        //静态属性
        static nation = 'china';
        //静态方法
        static worldPeace(){
            console.log('I wish world peace!');
        }
        constructor (name, age,addr) {
            this.name = name;
            this.age = age ;
            this.addr = addr;
        }
        sayHello(){
            console.log("hello,my name is "+this.name);
        }
    }
    //构造一个实例
    let person = new Person('张三',18,'西安市');
    //在实例上调用该方法
    person.sayHello();
    Person.worldPeace();
    console.log(Person.nation);
    console.log(person instanceof Person);
    console.log(person instanceof Object);
    */


    //需要注意的是，与java语言不同，构造方法可以返回指定类型的实例对象
    class Person{
        constructor () {
            return Object.create({});// 改变默认返回的类型
        }
    }
    //构造一个实例
    let person = new Person();
    console.log(person instanceof Person);
    console.log(person instanceof Object);


</script>
</body>
</html>